"""
封装一些工具
Powered By cc
2020/04/07
"""
import inspect
import os

from common.Excel import ExcelReader


def getfunc(obj,metohed):
    """
    通过反射获取函数和参数列表的个数
    :param obj:实例
    :param metohed:实例的方法
    :return:
    """
    try:
        func = getattr(obj,metohed)
    except Exception as e:
        return None
    arg = inspect.getfullargspec(func).__str__()
    arg = arg[arg.find('args=') + 5:arg.find(', varargs')]
    arg = eval(arg)
    arg.remove('self')
    return func, len(arg)

def excelResultAnalysis(excelPath):
    """
    对于excel文件的分析
    :param excelPath: 用例执行完以后的excel文件
    :return: 返回一个二维的列表
    """
    #如果不是文件就不分析了，直接返回
    if not os.path.isfile(excelPath):
        return None
    #统计结果的列表
    analysisList = []
    #每一组的测试用例
    groupList = []
    #总的测试用例数
    totalNum = 0
    #总的用例通过数量
    totalPassNum = 0
    read = ExcelReader()
    read.open_excel(excelPath)
    for sheetIndex in range(read.sheetNum):
        # 每一组额测试用例数量，切换sheet页会清零
        groupName = ''
        #每组用例通过数量
        groupPassNum = 0
        #每组的用例总数
        groupNum = 0
        #切换sheet页
        read.switchSheetByIndex(sheetIndex)
        #从第二行开始，第一行不是用例是表头
        for row in range(1,read.rows):
            #逐行读取
            line = read.readLine(row)
            #第一列或者第二列不为空就不是用例行
            if len(line[0]) >1 or len(line[1]) >1:
                #第二列不为空，分组用例不为空
                if len(line[1])>0:
                    #查找sheet页的第二个分组用例
                    if row > 4:
                        groupList.append(groupName)
                        groupList.append(groupNum)
                        groupList.append(groupPassNum)
                        if groupNum > groupPassNum:
                            groupList.append('失败')
                        else:
                            groupList.append('成功')
                        analysisList.append(groupList)
                        #清零每组用例的统计
                        groupList = []
                        groupPassNum = 0
                        groupNum = 0


                    groupName = line[1]
            else:
                #测试行，断言和关键字都不能为空
                if len(line[2]) > 1 and len(line[7]) >1 :
                    #测试用例数加一
                    totalNum += 1
                    groupNum +=1
                    if line[10] == 'pass':
                        totalPassNum +=1
                        groupPassNum += 1
                #到sheet页最后一行了，也需要加入
                if row == read.rows - 1:
                    groupList.append(groupName)
                    groupList.append(groupNum)
                    groupList.append(groupPassNum)
                    if groupNum > groupPassNum:
                        groupList.append('失败')
                    else:
                        groupList.append('成功')
                    analysisList.append(groupList)
                    # 清零每组用例的统计
                    groupList = []
                    groupPassNum = 0
                    groupNum = 0
    groupList.append(totalNum)
    groupList.append(totalPassNum)
    if totalNum > totalPassNum:
        groupList.append('失败')
    else:
        groupList.append('成功')
    analysisList.append(groupList)

    return analysisList


if __name__ == '__main__':
    resultExcelPath = '../lib/result/resultHTTPLogin.xlsx'
    print(excelResultAnalysis(resultExcelPath))







